#ifndef MCP_JSON_H
#define MCP_JSON_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stddef.h>  // 添加 size_t 支持

// JSON 值类型
typedef enum {
    JSON_NULL,
    JSON_BOOLEAN,
    JSON_NUMBER,
    JSON_STRING,
    JSON_OBJECT,
    JSON_ARRAY
} JsonType;

// JSON 值结构
typedef struct JsonValue JSONObject;
typedef struct JsonMember JsonMember;

struct JsonValue {
    JsonType type;
    union {
        int boolean;        // 布尔值
        double number;      // 数字
        char *string;       // 字符串
        struct {            // 对象
            JsonMember *members;
            size_t size;
            size_t capacity;
        } object;
        struct {            // 数组
            JSONObject *values;
            size_t size;
            size_t capacity;
        } array;
    } value;
};

// JSON 对象成员
struct JsonMember {
    char *key;
    JSONObject value;
};

// ==================== 基本功能 ====================
JSONObject json_create_null();
JSONObject json_create_boolean(int value);
JSONObject json_create_number(double value);
JSONObject json_create_string(const char *value);
JSONObject json_create_object();
JSONObject json_create_array();

void json_free(JSONObject *json);

void json_object_add_member(JSONObject *object, const char *key, JSONObject value);
void json_array_add_element(JSONObject *array, JSONObject value);

// ==================== 序列化功能 ====================
char *json_stringify(const JSONObject *json);
void json_print(const JSONObject *json);

// ==================== 解析功能 ====================
JSONObject json_parse(const char *json_str);

// ==================== GET 功能 ====================
JSONObject* json_get_object(const JSONObject *object, const char *key);
JSONObject* json_get_array(const JSONObject *array, size_t index);
const char* json_get_string(const JSONObject *json);
double json_get_number(const JSONObject *json);
int json_get_boolean(const JSONObject *json);

// ==================== 简化的 GET 功能 ====================
int json_get_boolean_key(const JSONObject *object, const char *key);
int json_get_int_key(const JSONObject *object, const char *key);
const char* json_get_string_key(const JSONObject *object,const char *key);

// ==================== 类型检查函数 ====================
int json_is_object(const JSONObject *json);
int json_is_array(const JSONObject *json);
int json_is_string(const JSONObject *json);
int json_is_number(const JSONObject *json);
int json_is_boolean(const JSONObject *json);
int json_is_null(const JSONObject *json);

#endif